package com.shycloud.common.minio.service;

import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.rtc.RtcRoomManager;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 七牛工具
 * @author yyy
 * @date 2019-04-25
 */
@Slf4j
@RequiredArgsConstructor
@AllArgsConstructor
public class QiniuUtils {

	private final String rtcAppid;

	@Autowired
	private RtcRoomManager rtcRoomManager;

	/**
	 * @param roomName 操作所查询的连麦房间
	 * @return Response      如果不读取Response的数据，请注意调用Close方法关闭
	 * @throws QiniuException
	 */
	@SneakyThrows
	public Response listUser(String roomName) {
		return rtcRoomManager.listUser(rtcAppid,roomName);
	}

	/**
	 * @param roomName 操作房间名
	 * @param userId   被踢人员
	 * @return Response      如果不读取Response的数据，请注意调用Close方法关闭
	 * @throws QiniuException
	 */
	@SneakyThrows

	public Response kickUser(String roomName, String userId) {

		return rtcRoomManager.kickUser(rtcAppid,roomName, userId);
	}

	/**
	 * @param prefix 所查询房间名的前缀索引，可以为空。
	 * @param offset 分页查询的位移标记
	 * @param limit  此次查询的最大长度
	 * @return Response      如果不读取Response的数据，请注意调用Close方法关闭
	 * @throws QiniuException
	 */
	@SneakyThrows
	public Response listActiveRooms(String prefix, int offset, int limit) {
		return rtcRoomManager.listActiveRooms(rtcAppid,prefix, offset, limit);
	}


	/**
	 * @param roomName   房间名称，需满足规格 ^[a-zA-Z0-9_-]{3,64}$
	 * @param userId     请求加入房间的用户 ID，需满足规格 ^[a-zA-Z0-9_-]{3,50}$
	 * @param expireAt   int64 类型，鉴权的有效时间，传入以秒为单位的64位Unix绝对时间，token 将在该时间后失效
	 * @param permission 该用户的房间管理权限，"admin" 或 "user"，默认为 "user" 。当权限角色为 "admin" 时，拥有将其他用户移除出房
	 *                   间等特权.
	 * @return roomToken
	 * @throws Exception
	 */
	@SneakyThrows
	public String getRoomToken(String roomName, String userId,
							   long expireAt, String permission) {
		return rtcRoomManager.getRoomToken(rtcAppid,roomName, userId, expireAt, permission);
	}

}
